<?php

/**
 * 数据库扩展
 *
 *     */
class Db_DBbase
{
    /**
     * 当前执行的SQL
     * @var string
     */
    public static $sql = '';    //定义静态属性$sql
    public static $link_read 	= null;      
    public static $link_write 	= null; 
    public static $current_link = null; // 当前连接标识
    public static $query;
    public static $query_count = 0;
    public static $isDebug = false;
    

    /**
     * 连接数据库
     *
     * @return void
     */
    /*   PHP 代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获。
              需要进行异常处理的代码都必须放入 try 代码块内，
              以便捕获可能存在的异常。每一个 try 至少要有一个与之对应的 catch。
             使用多个 catch 可以捕获不同的类所产生的异常。当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时，
             PHP 代码就会在跳转到最后一个 catch 的后面继续执行。当然，PHP 允许在 catch 代码块内再次抛出（throw）异常。*/
/*  如果想在同一类的成员方法中访问静态属性，可以通过在该静态属性的名称前加上操作符“self：：”。
  */
/*在php中：使用关键字static修饰的成员属性和成员方法被称为静态属性和静态方法。
静态属性和静态方法不需要在类被实例化的情况下就可以直接使用。
*/
   public static function init_mysql ($host="",$user="",$pass="",$db="",$charset,$isPconnect=true,$isDebug=true)
    {
    	self::$isDebug	=	$isDebug;   //访问静态属性isDebug

        $link = 'link_read';    //变量
        if (empty(self::$$link))
        {
            try
            {
            	if($isPconnect)
            	{
               	 	self::$$link = @mysql_pconnect($host,$user,$pass);  
            	}
                /*  mysql_pconnect打开持久的mysql连接           mysql_connect打开非持久的mysql连接   	  */
            	else 
            	{ 
            		self::$$link = @mysql_connect($host,$user,$pass);
            	}
                if (empty(self::$$link))
                {
                    throw new Exception(mysql_error(), 10);   //抛出异常
                }
                else
                {
                    if (mysql_get_server_info() > '4.1')   
      
                  
                    {
                        $charset = str_replace('-', '', $charset);   //str_replace() 函数使用一个字符串替换字符串中的另一些字符。
                        mysql_query("SET character_set_connection=" . $charset . ", character_set_results=" . $charset . ", character_set_client=binary");
                    }
                    if (mysql_get_server_info() > '5.0')
                     //mysql_get_server_info() 函数返回 MySQL 服务器的信息。如果成功，则返回 MySQL 服务器的版本号，如果失败，则返回 false
                    {
                        mysql_query("SET sql_mode=''");
                    }
                    if (@mysql_select_db($db) === false)
                    {
                        throw new Exception(mysql_error(), 11);
                    }
                }
            }
            catch (Exception $e)    //exception：异常情况
            {
                if (!$isDebug)
                {
                    if ($e->getCode() == 10)
                    {
                        echo '数据库连接失败，可能是数据库服务器地址、账号或密码错误';
                    }
                    elseif($e->getCode() == 11)
                    {
                        echo '数据库' . $db . '不存在';
                    }
                    else
                    {
                        echo 'Can\'t connect to MySQL server';
                    }
                }
                else
                {
                    echo $e->getMessage(), '<br/>', '<pre>', $e->getTraceAsString(), '</pre>';
                }
                //<pre></pre>是html标签，print_r是php输出语句，前面和后面可以允许任何输出，可以写在前面或者后面。
                exit;
            }
        }
        return self::$$link;   //返回静态属性link
    }


    /*
     * (读 + 写)
     *
     * @param  string $sql
     * @return bool
     */
    public static function query ($sql, $link)
    {
    		$return	=	array();
    	   //$sql		=	str_replace("hk_",__MYSQL_PRE,$sql);
            $query 	= @mysql_query($sql, $link);
       
            if ($query	=== false)
            {
            	$return["result"]	=	false;
            	$return["content"]	=	mysql_error();
            }
            else
            {
                 $return["result"]	=	true;
                 $return["content"]	=	$query;
            }
			return $return;
    }


    /*
     * 取得最后一次插入记录的ID值
     *
     * @return int
     */
    public static function insert_id ($_link)    //取得上一步 INSERT 操作产生的 ID 
    {
        return mysql_insert_id($_link);
    }


    /*
     * 返回受影响数目
     *
     * @return init
     */
    public static function affected_rows ($link)
    {
        return mysql_affected_rows($link);    // 
    }


    /*
     * 返回本次查询所得的总记录数...
     *
     * @return int
     */
    public static function num_rows ($query = false)
    {
        (empty($query)) && $query = self::$query;
        return mysql_num_rows($query);
    }


    /*
     * (读)返回单条记录数据
     *
     * @deprecated   MYSQL_ASSOC==1 MYSQL_NUM==2 MYSQL_BOTH==3
     * @param  int   $result_type
     * @return array
     */
    public static function fetch_one ($query = false)
    {
        return mysql_fetch_array($query, MYSQL_ASSOC);
    }


    /*
      (读)返回多条记录数据
      @deprecated    MYSQL_ASSOC==1 MYSQL_NUM==2 MYSQL_BOTH==3
       @param   int   $result_type
     * @return  array
     */
     //empty() 判断一个变量是否为“空”，isset() 判断一个变量是否已经设置
    public static function fetch_all ($query = false)
    {
        (empty($query)) && $query = self::$query;    
        $row = $rows = array();
        while ($row = mysql_fetch_array($query, MYSQL_ASSOC))
        {
            $rows[] = $row;
        }
        return (empty($rows)) ? false : $rows;
    }


    /*
     * 返回版本信息
     * @return <type>
     */
    public static function server_info()
    {
        return mysql_get_server_info();
    }

    /*
     * 选择数据库
     * @return <type>
     */
    public static function select_db($dbname)
    {
        return mysql_select_db($dbname);
    }

    /*
     * 获取当前执行的 SQL
	 *
     * @return string
     */
    public static function get_sql()
    {
        return self::$sql;
    }
    
    /*
     * 创建数据库
     *
     * @param string $host
     * @param 用户名 $user
     * @param 密码 $pass
     * @param 数据库 $dbName
     * @return bool
     */
    public function createdatabase($host,$user,$pass,$dbName)
    {
 		$sCreateDataBaseSql	=	"CREATE DATABASE ".$dbName.";";
    	$link				= 	@mysql_connect($host,$user,$pass);
    	if($this->query($sCreateDataBaseSql,$link))
    	{
    		return true;
    		
    	}
    	else 
    	{
    		return false;
    	}
    	
   
    }
    
}
?>
